/**
 * @file my_minmax.h
 * @brief 最值
 * @details 实现最大值与最小值的比较与赋值函数
 * @author all
 * @date 2023/11/7
 * @version 1.0
 * @par 更新记录：
 * - 2023/11/3 创建文档
 * - 2023/11/7 添加注释
*/
/********************<start>**********************/
#ifndef MY_MINMAX_H
#define MY_MINMAX_H

/********************<class>**********************/
///@brief 返回两个值中的最小值
template<class T>
inline const T& tf2Min(const T& a, const T& b) 
{
  return a < b ? a : b ;
}

///@brief 返回两个值中的最大值
template <class T>
inline const T& tf2Max(const T& a, const T& b) 
{
  return  a > b ? a : b;
}

///@brief 返回一个值，该值在指定的下限和上限之间，如果小于下限则返回下限，如果大于上限则返回上限，否则返回该值本身
template <class T>
inline const T& GEN_clamped(const T& a, const T& lb, const T& ub) 
{
	return a < lb ? lb : (ub < a ? ub : a); 
}

///@brief 将第二个值赋值给第一个值，如果第二个值小于第一个值
template <class T>
inline void tf2SetMin(T& a, const T& b) 
{
    if (b < a) 
	{
		a = b;
	}
}

///@brief 将第二个值赋值给第一个值，如果第二个值大于第一个值
template <class T>
inline void tf2SetMax(T& a, const T& b) 
{
    if (a < b) 
	{
		a = b;
	}
}

///@brief 将值限制在指定的下限和上限之间，如果小于下限则将值设为下限，如果大于上限则将值设为上限，否则保持不变
template <class T>
inline void GEN_clamp(T& a, const T& lb, const T& ub) 
{
	if (a < lb) 
	{
		a = lb; 
	}
	else if (ub < a) 
	{
		a = ub;
	}
}

#endif
/********************<end>********************/
